#try :
#    xxx
# except error :
#   xxx
#Exception或者不写 能匹配所有异常
# 自定义异常类 用raise 来抛出异常
#函数调用中的异常 ，层层调用，如果抛出了问题没有被保护，抛出问题后面处，后面的代码不执行，如果被保护，try-except后面的代码则会执行

import traceback

def level_3():
    print ('进入 level_3')
    a = [0]
    b = a[1]
    print ('离开 level_3')

def level_2():
    print ('进入 level_2')
    level_3()
    print ('离开 level_2')

def level_1():
    print ('进入 level_1')
    try:
        level_2()
    except :
        print(f'未知异常:{traceback.format_exc()}')
    print ('离开 level_1')


level_1()

print('程序正常退出')

with open('/Users/show/Downloads/编程/python学习/0019.txt','rb') as f:
    content = f.read().splitlines()

try:
    hangshu = 0
    for i in content:
        hangshu += 1
        i = i.strip()
        if not i:
            continue
        i = i.decode('utf8')
        length = len(i)
        print(f'第{hangshu:>04}行，有{length}个字符')
except:
    print(f'第{hangshu:>04}行，有非utf8字符')
